home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / t_os / nttcalc / nttcalc.bas next >
BASIC Source File  |  1993-11-30  |  12KB  |  382 lines

  1. 100 '
  2. 110 '********************************************************************
  3. 120 '**                                                                **
  4. 130 '**    「☆FAPX小判鮫☆通話料金計算NTTCALCV1.2☆」      **
  5. 140 '**                                                                **
  6. 150 '**                        NIFTY-Serve : HAD01045  (SAINT)         **
  7. 160 '**                                                                **
  8. 170 '**                        FOR FM-TOWNS + MOPTERM + FAPX           **
  9. 180 '**                                                                **
  10. 190 '********************************************************************
  11. 200 '
  12. 210 CLEAR
  13. 220 ON ERROR GOTO *TRAP
  14. 230 GOSUB *INIT      : ' 初期化
  15. 240 GOSUB *NTT_INPUT : ' NTTCALC.DAT 読み込み
  16. 250 GOSUB *DAT_INPUT : ' CONNECT.DAT 読み込み
  17. 260 GOSUB *MAIN2 : ' 電話番号CHECK
  18. 270 GOSUB *NTT_OUTPUT
  19. 280 GOSUB *月間集計入力
  20. 290 GOSUB *月間集計
  21. 300 GOSUB *月間表示
  22. 310 GOSUB *ENDING
  23. 320 GOTO 280
  24. 330 '
  25. 340 '
  26. 350 '
  27. 360 '
  28. 370 '
  29. 380 *INIT : ' 初期化
  30. 390 DIM L$(999),TEL$(999),NTT(999),LOGOUT$(999)
  31. 400 DIM T1$(999),T1(999),DISCOUNT(999),GTIME(23)
  32. 410 DIM YEAR$(999),YEAR(999),MN$(999),MN(999),DAY$(999),DAY(999)
  33. 420 DIM WEEK(999),TI(999),NT$(99),NT(99),DA3$(6)
  34. 430 DIM GOLD2(999),GOLD3(6),GOLD4(6)
  35. 440 DA3$(1)="-01":DA3$(2)="-06":DA3$(3)="-11"
  36. 450 DA3$(4)="-16":DA3$(5)="-21":DA3$(6)="-26"
  37. 460 DIM DAYTBL(13):RESTORE *DAYTBL
  38. 470 FOR I=0 TO 12:READ DAYTBL(I):NEXT I
  39. 480 *DAYTBL
  40. 490 DATA 0,31,28,31,30,31,30,31,31,30,31,30,31
  41. 500 DIM NTTTBL(5,2):RESTORE *NTTTBL
  42. 510 FOR I=1 TO 2:FOR J=1 TO 5:READ NTTTBL(J,I):NEXT J:NEXT I
  43. 520 *NTTTBL
  44. 530 DATA  180,  90,  45,  30,  21
  45. 540 DATA  240, 120,  60,  40,  28
  46. 550 WINDOW (0,0)-(639,479):COLOR 7,1,,4:WIDTH 80,25:CLS
  47. 560 LOCATE 0,0:LINE (0,0)-(639,15),PSET,3,BF
  48. 570 PRINT "FAPX小判鮫ソフト(^^)通話料金計算NTTCALC V1.2    << HAD01045 SAINT >> "
  49. 580 RETURN
  50. 590 '
  51. 600 '
  52. 610 '
  53. 620 '
  54. 630 '
  55. 640 *NTT_INPUT : ' NTTCALC.DAT 読み込み
  56. 650 MX1=16:MX2=16*21:MY1=20*2:MY2=20*4:COL1=0:COL2=6:GOSUB *BOX
  57. 660 COLOR 1:LOCATE  3, 3:PRINT "只今NTTCALC.DATを読み込み中です"
  58. 670 OPEN "I",#1,"NTTCALC.DAT"
  59. 680 INPUT #1,NT
  60. 690 FOR K=1 TO NT
  61. 700 INPUT #1,NT$(K),NT(K)
  62. 710 NEXT K
  63. 720 CLOSE #1
  64. 730 RETURN
  65. 740 '
  66. 750 '
  67. 760 '
  68. 770 '
  69. 780 '
  70. 790 *DAT_INPUT : ' CONNECT.DAT 読み込み
  71. 800 MX1=16:MX2=16*21:MY1=20*2:MY2=20*4:COL1=0:COL2=6:GOSUB *BOX
  72. 810 COLOR 1:LOCATE  3, 3:PRINT "只今CONNECT.DATを読み込み中です"
  73. 820 OPEN "I",#1,"CONNECT.DAT"
  74. 830 I=0
  75. 840 LINE INPUT #1,L$(I)
  76. 850 IF EOF(1) THEN *DAT_CLOSE
  77. 860 I=I+1
  78. 870 IF I=1000 THEN *LIMIT
  79. 880 GOTO 840
  80. 890 *DAT_CLOSE
  81. 900 NN=I
  82. 910 CLOSE #1
  83. 920 RETURN
  84. 930 '
  85. 940 *LIMIT
  86. 950 MX1=16:MX2=16*21:MY1=20*17:MY2=20*23:COL1=0:COL2=7:GOSUB *BOX
  87. 960 COLOR 2:LOCATE  3,19:PRINT "アクセス回数が1000回を越えています"
  88. 970         LOCATE  3,20:PRINT "不都合な方はNIFTY:HAD01045 (SAINT)"
  89. 980         LOCATE  3,21:PRINT "までメールを下さい"
  90. 990 WAIT 1000:END
  91. 1000 '
  92. 1010 '
  93. 1020 '
  94. 1030 '
  95. 1040 *MAIN2
  96. 1050 ' 電話番号 TEL$ , LOGOUT時間 LOGOUT$ , 通話時間 T1$ の取得 
  97. 1060 ' LOGOUT時間→年月日曜日取得 YEAR$ , MN$, DAY$ , WEEK 
  98. 1070 ' 割引時間かどうかの判定 DISCOUNT =1(NO) / 2(YES)
  99. 1080 '
  100. 1090 MX1=16:MX2=16*21:MY1=20*2:MY2=20*4:COL1=0:COL2=6:GOSUB *BOX
  101. 1100 COLOR 1:LOCATE  3, 3:PRINT "只今通話料金を計算中です..."
  102. 1110 GOSUB *MAIN3
  103. 1120 FOR I=0 TO NN
  104. 1130 L$=L$(I)
  105. 1140 GOSUB *L_CUT
  106. 1150 TEL$(I)=TEL$:LOGOUT$(I)=LOGOUT$:T1$(I)=T1$:T1(I)=T1:GTIME(LHOUR)=GTIME(LHOUR)+1
  107. 1160 GOSUB *DA_CUT
  108. 1170 YEAR$(I)=YEAR$:MN$(I)=MN$:DAY$(I)=DAY$:WEEK(I)=WEEK
  109. 1180 GOSUB *割引判定
  110. 1190 DISCOUNT(I)=DISCOUNT
  111. 1200 GOSUB *MAIN4
  112. 1210 NEXT I
  113. 1220 LOGOUT1$=LOGOUT$(0):LOGOUT2$=LOGOUT$(NN)
  114. 1230 GOSUB *MAIN5
  115. 1240 GOSUB *MAIN6
  116. 1250 RETURN
  117. 1260 '
  118. 1270 '
  119. 1280 '
  120. 1290 '
  121. 1300 '
  122. 1310 *MAIN5
  123. 1320 COLOR 1:LOCATE  7,13:PRINT "記録期間  :";LOGOUT1$
  124. 1330         LOCATE  7,14:PRINT "                   ∥"
  125. 1340         LOCATE  7,15:PRINT "          :";LOGOUT2$
  126. 1350 RETURN
  127. 1360 '
  128. 1370 '
  129. 1380 '
  130. 1390 '
  131. 1400 *MAIN6
  132. 1410 MX1=16*23:MX2=16*39:MY1=20*2:MY2=20*7:COL1=0:COL2=4:GOSUB *BOX
  133. 1420 COLOR 1:LOCATE 47,3:PRINT "[LOGOUT時間集計]"
  134. 1430 LINE (386,111)-(612,112),PSET,1,BF:GTIMEMAX=0
  135. 1440 LOCATE 49,6:PRINT "0      6     12     18    23"
  136. 1450 FOR G=0 TO 23
  137. 1460 IF GTIMEMAX<GTIME(G) THEN GTIMEMAX=GTIME(G)
  138. 1470 NEXT G
  139. 1480 FOR G=0 TO 23
  140. 1490 GTIMERATE=GTIME(G)/GTIMEMAX
  141. 1500 GTIME$=RIGHT$(STR$(GTIME(G)),2)
  142. 1510 IF GTIMERATE<>0 THEN LINE (392+G*9,110)-(399+G*9,110-GTIMERATE*25),PSET,3,BF
  143. 1520 SYMBOL (392+G*9,99-GTIMERATE*25),GTIME$,.5!,.75!,1
  144. 1530 NEXT G
  145. 1540 '
  146. 1550 '
  147. 1560 '
  148. 1570 '
  149. 1580 '
  150. 1590 *MAIN3
  151. 1600 GOLD=0
  152. 1610 MX1=16:MX2=16*21:MY1=20*5:MY2=20*16:COL1=0:COL2=4:GOSUB *BOX
  153. 1620 COLOR 1:LOCATE  3, 6:PRINT "[総通話料金計算]"
  154. 1630 RETURN
  155. 1640 '
  156. 1650 '
  157. 1660 '
  158. 1670 *MAIN4
  159. 1680         IF TEL$(I)="" THEN 1840
  160. 1690         COLOR 1
  161. 1700         LOCATE  7, 8:PRINT "電話番号  :";TEL$(I)
  162. 1710         LOCATE  7, 9:PRINT "LOGOUT時間:";LOGOUT$(I)
  163. 1720         LOCATE  7,10:PRINT "通話時間  : ";T1$(I)
  164. 1730         FOR K=1 TO NT
  165. 1740         IF TEL$(I)=NT$(K) THEN 1790
  166. 1750         NEXT K
  167. 1760         GOSUB *新電話番号
  168. 1770         NT=NT+1:NT$(NT)=TEL$(I):NT(NT)=A
  169. 1780         GOTO 1730
  170. 1790         GOLD2(I)=(T1(I) \ NTTTBL(NT(K),DISCOUNT(I))+1) * 10
  171. 1800         GOLD=GOLD+GOLD2(I)
  172. 1810 '       COLOR DISCOUNT(I)
  173. 1820         LOCATE  7,11:PRINT USING "通話料金  :  ######円";GOLD2(I)
  174. 1830         LOCATE  7,12:PRINT USING "総通話料金:  ######円";GOLD
  175. 1840 RETURN
  176. 1850 '
  177. 1860 '
  178. 1870 '
  179. 1880 '
  180. 1890 *新電話番号
  181. 1900 MX1=16:MX2=16*21:MY1=20*17:MY2=20*23:COL1=0:COL2=7:GOSUB *BOX
  182. 1910 COLOR 2:LOCATE  3,19:PRINT "初めての電話番号(";TEL$(I);")です"
  183. 1920         LOCATE  3,20:PRINT "10円で通話可能な時間を選んでください"
  184. 1930         LOCATE  3,21:PRINT "(1)・・・180秒  (2)・・・90秒  (3)・・・45秒"
  185. 1940         LOCATE  3,22:PRINT "(4)・・・30秒   (5)・・・21秒"
  186. 1950         LOCATE  3,23:PRINT "                       番号=>";
  187. 1960         INPUT "",A$:A=VAL(A$)
  188. 1970 MX1=16:MX2=16*21:MY1=20*17:MY2=20*23:COL1=1:COL2=1:GOSUB *BOX
  189. 1980 COLOR 2:LOCATE  3,19:PRINT "                                    "
  190. 1990         LOCATE  3,20:PRINT "                                    "
  191. 2000         LOCATE  3,21:PRINT "                                    "
  192. 2010         LOCATE  3,22:PRINT "                                    "
  193. 2020         LOCATE  3,23:PRINT "                                    ";
  194. 2030         IF A=0 OR A>5 THEN 1900
  195. 2040 RETURN
  196. 2050 '
  197. 2060 *NTT_OUTPUT
  198. 2070 OPEN "O",#1,"NTTCALC.DAT"
  199. 2080 PRINT #1,NT
  200. 2090 FOR K=1 TO NT
  201. 2100 WRITE #1,NT$(K),NT(K)
  202. 2110 NEXT K
  203. 2120 CLOSE #1
  204. 2130 RETURN
  205. 2140 '
  206. 2150 '
  207. 2160 '
  208. 2170 '
  209. 2180 '
  210. 2190 *BOX
  211. 2200 BEEP 1
  212. 2210 LINE (MX2+1,MY1+5)-(MX2+5,MY2+5),PSET,COL1,BF
  213. 2220 LINE (MX1+5,MY2+1)-(MX2+5,MY2+5),PSET,COL1,BF
  214. 2230 LINE (MX1,MY1)-(MX2,MY2),PSET,COL2,BF
  215. 2240 BEEP 0
  216. 2250 RETURN
  217. 2260 '
  218. 2270 '
  219. 2280 '
  220. 2290 '
  221. 2300 '
  222. 2310 *TRAP
  223. 2320 IF ERL=820 THEN BEEP:MX1=50:MX2=590:MY1=350:MY2=405:COL1=0:COL2=7:GOSUB *BOX:LOCATE 11,19:COLOR 2:PRINT "CONNECT.DATが見つかりません。処理を中止します。":GOTO 2400
  224. 2330 IF ERL=670 THEN RESUME 250
  225. 2340 IF ERL=2070 THEN KILL "NTTCALC.DAT" : RESUME 2070
  226. 2350 MX1=16:MX2=16*21:MY1=20*17:MY2=20*23:COL1=0:COL2=7:GOSUB *BOX
  227. 2360 COLOR 2:LOCATE  3,19:PRINT "エラーが発生しました"
  228. 2370         LOCATE  3,20:PRINT "ERR=";ERR;"    ERL=";ERL
  229. 2380         LOCATE  3,21:PRINT "不都合な方はNIFTY:HAD01045 (SAINT)"
  230. 2390         LOCATE  3,22:PRINT "までメールを下さい"
  231. 2400 WAIT 500:END
  232. 2410 '
  233. 2420 '
  234. 2430 '
  235. 2440 *DA_CUT
  236. 2450 ' DA$に"1993-03-13"などを入れて呼ぶとWEEKに曜日が入る
  237. 2460 ' 日曜日が WEEK=1 になる
  238. 2470 YEAR$=MID$(DA$,1,4):YEAR=VAL(YEAR$)
  239. 2480 MN$=MID$(DA$,6,2):MN=VAL(MN$)
  240. 2490 DAY$=MID$(DA$,9,2):DAY=VAL(DAY$)
  241. 2500 IF YEAR*MN*DAY=0 THEN BEEP :STOP
  242. 2510 WEEK=0:BASE0=2:FAR=0
  243. 2520 BASE = ((BASE0-1)+YEAR-1900+((YEAR-1900)/4)) MOD 7 +1
  244. 2530 FOR II=1 TO MN-1:FAR=FAR+DAYTBL(II):NEXT II
  245. 2540 FAR = FAR + DAY - 1
  246. 2550 IF MN>2 AND YEAR MOD 4=0 THEN FAR=FAR+1
  247. 2560 WEEK = (BASE-1+FAR) MOD 7 +1:  ' 日曜日が「1」になる
  248. 2570 RETURN
  249. 2580 '
  250. 2590 '
  251. 2600 '
  252. 2610 '
  253. 2620 *L_CUT
  254. 2630 ' L$=L$(I)を入れて呼ぶと、TEL$,LOGOUT$,T1$,DA$,TI$を返す
  255. 2640 TEL$="":LOGOUT$="":T1$=""
  256. 2650 J=8
  257. 2660 II$=MID$(L$,J,1)
  258. 2670 IF II$=";" THEN 2710
  259. 2680 TEL$=TEL$+II$
  260. 2690 J=J+1
  261. 2700 GOTO 2660
  262. 2710 J=J+10
  263. 2720 II$=MID$(L$,J,1)
  264. 2730 IF II$=";" THEN 2770
  265. 2740 LOGOUT$=LOGOUT$+II$
  266. 2750 J=J+1
  267. 2760 GOTO 2720
  268. 2770 J=J+8
  269. 2780 II$=MID$(L$,J,1)
  270. 2790 IF II$=";" THEN 2830
  271. 2800 T1$=T1$+II$
  272. 2810 J=J+1
  273. 2820 GOTO 2780
  274. 2830 DA$=MID$(LOGOUT$,1,10)
  275. 2840 TI$=MID$(LOGOUT$,12,8)
  276. 2850 THOUR$=MID$(T1$,1,2):TMIN$=MID$(T1$,4,2):TSEC$=MID$(T1$,7,2)
  277. 2860 THOUR=VAL(THOUR$):TMIN=VAL(TMIN$):TSEC=VAL(TSEC$)
  278. 2870 T1=3600*THOUR+60*TMIN+TSEC
  279. 2880 LHOUR$=MID$(TI$,1,2):LMIN$=MID$(TI$,4,2):LSEC$=MID$(TI$,7,2)
  280. 2890 LHOUR=VAL(LHOUR$):LMIN=VAL(LMIN$):LSEC=VAL(LSEC$)
  281. 2900 RETURN
  282. 2910 '
  283. 2920 '
  284. 2930 '
  285. 2940 '
  286. 2950 '
  287. 2960 *割引判定
  288. 2970 '  LOGOUT時間TI$="23:00:00"と通話時間T1$をいれて呼ぶと
  289. 2980 '  NTT標準割引(23:00~08:00)の場合DISCOUNT=2が入る
  290. 2990 DISCOUNT=1:T1=VAL(T1$)
  291. 3000 HOUR$=MID$(TI$,1,2):HOUR=VAL(HOUR$)
  292. 3010 MIN$=MID$(TI$,4,2):MIN=VAL(MIN$)
  293. 3020 SEC$=MID$(TI$,7,2):SEC=VAL(SEC$)
  294. 3030 TTOTAL1=HOUR*3600+MIN*60+SEC
  295. 3040 TTOTAL2=TTOTAL1-T1
  296. 3050 ' PRINT "ttotal1=";TTOTAL1,"ttotal2=";TTOTAL2
  297. 3060 IF (TTOTAL1>=82800) * (TTOTAL2>=82800) THEN DISCOUNT=2
  298. 3070 IF (TTOTAL1<28800)  * (TTOTAL2>=-3600) THEN DISCOUNT=2
  299. 3080 RETURN
  300. 3090 '
  301. 3100 '
  302. 3110 '
  303. 3120 '
  304. 3130 '
  305. 3140 '
  306. 3150 *月間集計入力
  307. 3160 MX1=16:MX2=16*21:MY1=20*17:MY2=20*23:COL1=0:COL2=7:GOSUB *BOX
  308. 3170 COLOR 2:LOCATE  3,19:PRINT "一ヵ月の通話料金を計算します"
  309. 3180         LOCATE  3,20:PRINT "計算したい年と月を入力してください"
  310. 3190         LOCATE  3,22:PRINT " 年 (例)1993    番号=>";
  311. 3200         INPUT "",A$:YEAR1=INT(VAL(A$))
  312. 3210         IF YEAR1=0 THEN 3170
  313. 3220         LOCATE  3,23:PRINT "  月 (例)12     番号=>";
  314. 3230         INPUT "",A$:MN1=INT(VAL(A$))
  315. 3240 MX1=16:MX2=16*21:MY1=20*17:MY2=20*23:COL1=1:COL2=1:GOSUB *BOX
  316. 3250 COLOR 2:LOCATE  3,19:PRINT "                                    "
  317. 3260         LOCATE  3,20:PRINT "                                    "
  318. 3270         LOCATE  3,21:PRINT "                                    "
  319. 3280         LOCATE  3,22:PRINT "                                    "
  320. 3290         LOCATE  3,23:PRINT "                                    ";
  321. 3300         IF MN1=0 OR MN1>12 THEN *月間集計入力
  322. 3310 RETURN
  323. 3320 '
  324. 3330 '
  325. 3340 '
  326. 3350 '
  327. 3360 *月間集計
  328. 3370 '
  329. 3380 MX1=16:MX2=16*21:MY1=20*2:MY2=20*4:COL1=0:COL2=6:GOSUB *BOX
  330. 3390 COLOR 1:LOCATE  3, 3:PRINT "月間通話料金を計算中です..."
  331. 3400 MN2=MN1+1
  332. 3410 YEAR2=YEAR1
  333. 3420 IF MN2=13 THEN MN2=1:YEAR2=YEAR1+1
  334. 3430 MN1$=RIGHT$("00"+MID$(STR$(MN1),2),2)
  335. 3440 YEAR1$=MID$(STR$(YEAR1),2)
  336. 3450 DA1$=YEAR1$+"-"+MN1$
  337. 3460 MN2$=RIGHT$("00"+MID$(STR$(MN2),2),2)
  338. 3470 YEAR2$=MID$(STR$(YEAR2),2)
  339. 3480 DA2$=YEAR2$+"-"+MN2$
  340. 3490 FOR J=1 TO 6
  341. 3500 GOLD3(J)=0:GOLD4(J)=0
  342. 3510 NEXT J
  343. 3520 FOR I=0 TO NN
  344. 3530 FOR J=1 TO 6
  345. 3540 IF LOGOUT$(I)>=DA1$+DA3$(J) AND LOGOUT$(I)<=DA2$+DA3$(J) THEN GOLD3(J)=GOLD3(J)+GOLD2(I):IF DISCOUNT(I)=2 THEN GOLD4(J)=GOLD4(J)+GOLD2(I)
  346. 3550 NEXT J
  347. 3560 NEXT I
  348. 3570 RETURN
  349. 3580 '
  350. 3590 '
  351. 3600 '
  352. 3610 '
  353. 3620 *月間表示
  354. 3630 '
  355. 3640 '
  356. 3650 MX1=16*23:MX2=16*39:MY1=20*8:MY2=20*16:COL1=0:COL2=6:GOSUB *BOX
  357. 3660 COLOR 1:LOCATE 47,9:PRINT "[月間通話料金]      (23時~8時)"
  358. 3670 FOR J=1 TO 6
  359. 3680 DA3$=DA1$+DA3$(J)
  360. 3690 LOCATE 48,9+J:PRINT USING "&        &: #####円 (#####円)";DA3$;GOLD3(J);GOLD4(J)
  361. 3700 NEXT J
  362. 3710 LOCATE 60,16:PRINT "表示日より一ヵ月分"
  363. 3720 RETURN
  364. 3730 '
  365. 3740 '
  366. 3750 '
  367. 3760 '
  368. 3770 *ENDING
  369. 3780 '
  370. 3790 '
  371. 3800 MX1=16:MX2=16*21:MY1=20*17:MY2=20*23:COL1=0:COL2=7:GOSUB *BOX
  372. 3810 COLOR 2:LOCATE  3,19:PRINT "プログラムを終了しますか"
  373. 3820         LOCATE  3,20:PRINT " 終了する           [RETURN]"
  374. 3830         LOCATE  3,21:PRINT " 別の月間集計を行う [R]"
  375. 3840         LOCATE  3,22:PRINT "           入力=>";
  376. 3850         INPUT "",A$:IF A$<>"R" AND A$<>"r" THEN END
  377. 3860 COLOR 2:LOCATE  3,19:PRINT "                               "
  378. 3870         LOCATE  3,20:PRINT "                               "
  379. 3880         LOCATE  3,21:PRINT "                               "
  380. 3890         LOCATE  3,22:PRINT "                     ";
  381. 3900 RETURN
  382.